YFX Outline
source
目的
1. Outlineを表示する仕組み
lilToonのアウトライン(背面法)は面コーナーのノーマル方向に押し出すが、Geometry nodeには面コーナーのノーマルを取得する手段がないため。
lilToonのアウトライン
各面の頂点をVertex Per FaceのNormal方向に押し出す
Geometry nodeではVertex per faceのNormalを取得する手段がないようだ
2. Outlineを修正する仕組み
頂点カラーを焼き込みアウトラインの方向を補正するスクリプトです。ハードエッジのモデルやシェーディング用に法線を調整されたモデルでの滑らかなアウトラインの実現を補助します。
Blender上でできるのでBoothなどでアバターやプロップを販売する人向け
https://gyazo.com/7d9aeed042da09722e7e192f53c0687f
頂点アルファの見方
Color Attributesの「プロパティ名」をAttributeノードのnameに入れる
AttributeノードのAlphaをBaseColorへ接続(Principied BSDFを使っている)
https://gyazo.com/3b369a4c16d920461ab5b69d6efdb78e
頂点アルファペイント
Vertex Paintモードにする
ToolよりBrushSettingsのBlend = Erase Alpha or Add Alphaを使用
https://gyazo.com/d0debc5d90f7816c8266e4a7d3271d08
Plan
Outlineを表示する仕組み
Testモデル作成
Unityで読み込んでlilOutlineUtilする
BlenderでGeometyNodeでOutline作成
手順確立
Outlineを修正する仕組み
lilOutline調査
ChatGPT使えるかな?
lilOutline実装
Requirement
object選択→OutlineFix
Coding
tangent, bitangentの算出
blender doc
Vertex
頂点
普通に頂点
Cubeでは8個
code:vert.py
for i in mesh.vertices
// Cubeでは8個
面頂点ループ
面に対する頂点のループ
Cubeでは24個
code:poly.py
for poly in mesh.polygons:
for loop_index in poly.loop_indices:
// Cubeでは24個
TestData
VertexColor表示
左からスムースシェード、フラットシェード、フラットシェード+頂点カラースムース
lilToonの頂点カラーOutlineは細くなってしまうようだ
正直これならスムースシェードかけたほうがましかも
lilOutline自体が微妙な気がしてきた。。。
https://gyazo.com/ac06ab53aba600924d143cab74d54802
法線転写したモデルにlilOutlineかけたら結構きれになった
法線転写で威力を発揮するようだ
TODO ほかのアバターがどうしているか確認
右:lilOutline前、左:lilOutline後
https://gyazo.com/423a8e1a16d26e34577c56e9fc329274
UM
https://gyazo.com/da70c2bbbecdf614db1c5f4a5328f8bc
https://gyazo.com/0f3a69c603f7e725961081a3e3d7a793
https://gyazo.com/5200c590eccd8bc13c86830e4415222e
https://gyazo.com/83652564fd8e4645c0020e212a0c8e1a